package com.divemotor.ventarepuestosinternet.beans.lazy;

import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

import com.divemotor.ventarepuestosinternet.exception.DivemotorBusinessException;
import com.divemotor.ventarepuestosinternet.model.Promocion;
import com.divemotor.ventarepuestosinternet.model.Repuesto;
import com.divemotor.ventarepuestosinternet.service.RepuestoService;

public class RepuestoPromocionLazy extends LazyDataModel<Repuesto> {

	private static final long serialVersionUID = 1L;
	public static final Logger logger = Logger.getLogger(RepuestoPromocionLazy.class);
    
	private List<Repuesto> listaRepuestoPromocion;
	private RepuestoService repuestoService;
	private Repuesto repuestoFiltro;
	private Promocion promocionAsignar;
	private Integer nroRegistros;
	
	public RepuestoPromocionLazy(RepuestoService repuestoService, Repuesto repuestoFiltro, Promocion promocion){
		this.repuestoService = repuestoService;
		this.repuestoFiltro = repuestoFiltro;
		this.promocionAsignar = promocion;
	}
    
    @Override
	public List<Repuesto> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
    	try {
    		listaRepuestoPromocion = repuestoService.buscarRepuestosAsignablesPorPromocion(first, pageSize, sortOrder, sortField, repuestoFiltro, promocionAsignar);
    		nroRegistros = repuestoService.obtenerNumeroRepuestosAsignablesPorPromocion(repuestoFiltro, promocionAsignar);
    		setRowCount(nroRegistros);
			return listaRepuestoPromocion;
		} catch (DivemotorBusinessException e) {
			logger.error("EX* load DivemotorBusinessException: " + e.getMessage());
			return null;
		} catch (Exception e) {
			logger.error("EX* load Exception: " + e.getMessage());
			return null;
		}
	}
    
    @Override
	public Object getRowKey(Repuesto repuesto) {
		return repuesto.getIdRepuesto();
	}

	@Override
	public Repuesto getRowData(String repuestoId) {
		Integer id = Integer.valueOf(repuestoId);
		for (Repuesto repuesto : listaRepuestoPromocion) {
			if (id.equals(repuesto.getIdRepuesto())) {
				return repuesto;
			}
		}
		return null;
	}
    
	@Override
	public void setRowIndex( int rowIndex ){
	   if ( rowIndex == -1 || getPageSize() == 0 ){
		   super.setRowIndex( -1 );
	   }else{
		   super.setRowIndex( rowIndex % getPageSize() );
	   }
	}

	public List<Repuesto> getListaRepuestoPromocion() {
		return listaRepuestoPromocion;
	}

	public void setListaRepuestoPromocion(List<Repuesto> listaRepuestoPromocion) {
		this.listaRepuestoPromocion = listaRepuestoPromocion;
	}

	public Integer getNroRegistros() {
		return nroRegistros;
	}

	public void setNroRegistros(Integer nroRegistros) {
		this.nroRegistros = nroRegistros;
	}
}
